home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FishMarket 1.0
/
FishMarket v1.0.iso
/
fishies
/
076-100
/
disk_098
/
thai
/
quizprint.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-05-06
|
8KB
|
398 lines
#include <stdio.h>
#include "quiz.h"
#define THAI_HEIGHT 22
#define WIDTH 640
#define HEIGHT THAI_HEIGHT
#define DEPTH 1
#define REV 2
extern struct Screen * OpenScreen ();
extern struct Library * OpenLibrary ();
extern LONG OpenPrinter ();
extern void ClosePrinter ();
extern LONG PrintString ();
extern LONG DumpScreen ();
struct IntuitionBase * IntuitionBase;
struct GfxBase * GfxBase;
struct thai_phrase * chosen_sentence;
struct thai_phrase * chosen_word;
int file_changed = FALSE;
struct thai_phrase sentence_head;
struct thai_phrase word_head;
char scan_buf[ 3 ][ MAX_STRING ];
struct thai_phrase scan = {
&scan_buf[0][0] , &scan_buf[1][0] , &scan_buf[2][0] , 0 , 0
};
struct NewScreen ns = {
0 , 200 - HEIGHT , WIDTH , HEIGHT , DEPTH ,
1 , 0 ,
HIRES ,
CUSTOMSCREEN ,
NULL ,
NULL ,
NULL ,
NULL
};
struct Screen *screen = NULL;
static char buf[ 16 ];
struct IntuiText intui_text = {
1 , 0 , JAM1 , 0 , 0 ,
&thai_textattr , NULL , NULL
};
struct IntuiText intui_num = {
1 , 0 , JAM1 , 0 , 0 ,
NULL , NULL , NULL
};
int num_sentences , num_words;
int print_thai , print_english , print_phonetic;
main ( argc , argv )
int argc;
char **argv;
{
struct thai_phrase *p , *chosen , *list;
int word_opt , sent_opt;
print_thai = FALSE;
print_english = FALSE;
print_phonetic = FALSE;
word_opt = FALSE;
sent_opt = FALSE;
num_sentences = 15;
num_words = 15 * 2;
while ( argc > 1 && argv[1][0] == '-' ) {
switch ( argv[1][1] ) {
case 't' :
print_thai = TRUE;
break;
case 'p' :
print_phonetic = TRUE;
break;
case 'e' :
print_english = TRUE;
break;
case 'w' :
word_opt = TRUE;
if ( argv[1][2] != '\0' ) {
if ( sscanf ( argv[1]+2 , "%d" , &num_words ) != 1 )
usage ();
}
break;
case 's' :
sent_opt = TRUE;
if ( argv[1][2] != '\0' ) {
if ( sscanf ( argv[1]+2 , "%d" , &num_sentences ) != 1 )
usage ();
}
break;
default :
usage ();
}
argc--;
argv++;
}
if ( word_opt == FALSE && sent_opt == FALSE ) {
word_opt = TRUE;
sent_opt = TRUE;
}
if ( ( !print_thai ) && ( !print_english ) && ( !print_phonetic ) ) {
print_thai = TRUE;
print_english = TRUE;
print_phonetic = TRUE;
}
if ( argc > 1 )
usage ();
if ( ( IntuitionBase = (struct IntuitionBase *)
OpenLibrary ( "intuition.library" , (LONG)REV ) ) == NULL ) {
fprintf ( stderr , "Failed to open intuition.library\n" );
}
else {
if ( ( GfxBase = (struct GfxBase *)
OpenLibrary ( "graphics.library" , (LONG)REV ) ) == NULL ) {
fprintf ( stderr , "Failed to open graphics.library\n" );
}
else {
if ( !open_screen () ) {
fprintf ( stderr , "Failed to open screen\n" );
}
else {
if ( !open_thai_font () ) {
fprintf ( stderr , "Failed to open thai font\n" );
}
else {
if ( ! OpenPrinter () ) {
fprintf ( stderr , "Failed to open printer\n" );
}
else {
load_phrases ();
if ( sent_opt )
print_sentences ();
if ( word_opt )
print_words ();
/*unload_phrases (); not needed at present - never change words */
ClosePrinter ();
}
close_thai_font ();
}
close_screen ();
}
CloseLibrary ( GfxBase );
}
CloseLibrary ( IntuitionBase );
}
}
usage ()
{
fprintf ( stderr , "usage: quizprint [-t] [-p] [-e] [-sN] [-wN]\n" );
exit ( 1 );
}
open_screen ()
{
screen = OpenScreen ( &ns );
if ( screen != NULL ) {
SetRGB4 ( &screen->ViewPort , (LONG)1 , (LONG)0 , (LONG)0 , (LONG)0 );
SetRGB4 ( &screen->ViewPort , (LONG)0 , (LONG)15, (LONG)15, (LONG)15 );
SetRast ( &screen->RastPort , (LONG)0 );
return ( TRUE );
}
return ( FALSE );
}
close_screen ()
{
if ( screen != NULL ) {
CloseScreen ( screen );
screen = NULL;
}
}
print_sentences ()
{
struct thai_phrase *list , *p;
int i;
int line;
list = NULL;
while ( num_sentences-- > 0 && sentence_head.next != NULL ) {
random_sentence ();
if ( chosen_sentence != NULL ) {
/* unlink from list */
for ( p = &sentence_head;
p->next != chosen_sentence;
p = p->next )
;
p->next = chosen_sentence->next;
/* add to list of sentences to print */
chosen_sentence->next = list;
list = chosen_sentence;
}
}
/* now print list of selected sentences in english */
line = 0;
if ( print_english ) {
i = 1;
for ( p = list; p != NULL; p = p->next ) {
sprintf ( buf , "(%d) " , i++ );
if ( PrintString ( buf ) != 0 ) return;
if ( PrintString ( p->english ) != 0 ) return;
if ( PrintString ( "\n\n\n\n" ) != 0 ) return;
line += 4;
}
while ( ( line++ % 66 ) != 0 )
if ( PrintString ( "\n" ) != 0 ) return;
}
/* print in phonetical form */
line = 0;
if ( print_phonetic ) {
i = 1;
for ( p = list; p != NULL; p = p->next ) {
sprintf ( buf , "(%d) " , i++ );
if ( PrintString ( buf ) != 0 ) return;
if ( PrintString ( p->phonetic ) != 0 ) return;
if ( PrintString ( "\n\n\n\n" ) != 0 ) return;
line += 4;
}
while ( ( line++ % 66 ) != 0 )
if ( PrintString ( "\n" ) != 0 ) return;
}
/* print in thai form */
line = 0;
if ( print_thai ) {
i = 1;
for ( p = list; p != NULL; p = p->next ) {
sprintf ( buf , "(%d)" , i );
intui_num.IText = (UBYTE *) buf;
PrintIText ( &screen->RastPort , &intui_num ,
(LONG)0 , (LONG)10 );
intui_text.IText = (UBYTE *) p->thai;
PrintIText ( &screen->RastPort , &intui_text ,
(LONG)5*8 , (LONG)0 );
if ( DumpScreen ( screen ) != 0 ) return;
if ( PrintString ( "\n\n" ) != 0 ) return;
SetRast ( &screen->RastPort , (LONG)0 );
i++;
line += 4;
}
while ( ( line++ % 66 ) != 0 )
if ( PrintString ( "\n" ) != 0 ) return;
}
}
print_words ()
{
struct thai_phrase *list , *p;
int i , x , line;
list = NULL;
while ( num_words-- > 0 && word_head.next != NULL ) {
random_word ();
if ( chosen_word != NULL ) {
/* unlink from list */
for ( p = &word_head;
p->next != chosen_word;
p = p->next )
;
p->next = chosen_word->next;
/* add to list of words to print */
chosen_word->next = list;
list = chosen_word;
}
}
/* now print list of selected words in english */
line = 0;
if ( print_english ) {
i = 1;
for ( p = list; p != NULL; p = p->next ) {
sprintf ( buf , "(%d) " , i++ );
if ( PrintString ( buf ) != 0 ) return;
if ( PrintString ( p->english ) != 0 ) return;
if ( PrintString ( "\n\n" ) != 0 ) return;
line += 2;
}
while ( ( line++ % 66 ) != 0 )
if ( PrintString ( "\n" ) != 0 ) return;
}
/* print in phonetical form */
line = 0;
if ( print_phonetic ) {
i = 1;
for ( p = list; p != NULL; p = p->next ) {
sprintf ( buf , "(%d) " , i++ );
if ( PrintString ( buf ) != 0 ) return;
if ( PrintString ( p->phonetic ) != 0 ) return;
if ( PrintString ( "\n\n" ) != 0 ) return;
line += 2;
}
while ( ( line++ % 66 ) != 0 )
if ( PrintString ( "\n" ) != 0 ) return;
}
/* print in thai form */
line = 0;
if ( print_thai ) {
i = 1;
for ( p = list; p != NULL; p = p->next ) {
switch ( i % 4 ) {
case 1 : x = 0; break;
case 2 : x = 160; break;
case 3 : x = 320; break;
case 0 : x = 480; break;
}
sprintf ( buf , "(%d)" , i );
intui_num.IText = (UBYTE *) buf;
PrintIText ( &screen->RastPort , &intui_num ,
(LONG)x , (LONG)10 );
intui_text.IText = (UBYTE *) p->thai;
PrintIText ( &screen->RastPort , &intui_text ,
(LONG)x + 5*8 , (LONG)0 );
if ( ( i % 4 ) == 0 ) {
if ( DumpScreen ( screen ) != 0 ) return;
if ( PrintString ( "\n\n\n\n" ) != 0 ) return;
SetRast ( &screen->RastPort , (LONG)0 );
line += 6;
}
i++;
}
if ( ( i % 4 ) != 1 ) {
if ( DumpScreen ( screen ) != 0 ) return;
if ( PrintString ( "\n\n\n\n" ) != 0 ) return;
SetRast ( &screen->RastPort , (LONG)0 );
line += 6;
}
while ( ( line++ % 66 ) != 0 )
if ( PrintString ( "\n" ) != 0 ) return;
}
}